

module.exports = {
	typeOf,
	isNumeric,
	// isFunction,
}


// https://zhuanlan.zhihu.com/p/53385348
/**
 * JS 中判断一个函数是否为一个类
 * JS 中判断一个函数是否为一个类
 */

/*
// JS简单判断函数是否存在的方法
function showFace(unipcn,value){}
var isFunction =false;
try{
  //这里的代码需要用try一下,因为当showFace为定义时会抛出异常
  isFunction = typeof(eval('showFace'))=="function";
}catch(e){}
if(isFunction) {
  alert('showFace is a Function!');
}else{
  alert('showFace is not a Function!');
}

*/

/**
 * https://www.jb51.net/article/67551.htm
 * 是否存在指定的函数
 * @param  {[type]}  funcName [description]
 * @return {Boolean}          [description]
 */
function isExistsFunction(funcName) {
  try {
    if (typeof(eval(funcName)) == "function") {
      return true;
    }
  } catch(e) {}
  return false;
}




/**
 * 获取数据的类型
 * @param  {[type]} obj [description]
 * @return {[type]}     [description]
 */
function typeOf(obj) {
	if(typeof obj === 'undefined') {
		return 'undefined'
	}

	if( obj === null) {
		return 'null'
	}

	// number
	if(typeof obj === 'number' || obj instanceof Number) {
		return 'number'
	}
	// boolean
	if(typeof obj === 'boolean' || obj instanceof Boolean) {
		return 'boolean'
	}

	// string
	if(typeof obj === 'string' || obj instanceof String) {
		return 'string'
	}


	// function
	if(typeof obj === 'function' || obj instanceof Function) {
		return 'function'
	}

	// array
	if(typeof Array.isArray !== "undefined" && Array.isArray(obj)) {
		return 'array'
	}

	// date
	if(obj instanceof Date) {
		return 'date'
	}

	if(obj instanceof RegExp) {
		return 'regexp'
	}

	// var toString = Object.prototype.toString

	return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}



/**
 * 是否为数字或者数字类字符串
 * @param  {[type]}  num [description]
 * @return {Boolean}     [description]
 */
function isNumeric(num) {
	var type =  typeOf(num)
	if(type !== 'number' && type !== 'string') {
		return false
	}

	// +'', Number('') ==> 0,  parseInt('') => NaN
	var n = + num

	// 任意数据类型 转换为number类型(整型)
	// var n = num >>> 0

	return (n - n + 1) > 0 && num !== ''
}


